<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
                 type="text/css"?>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=895340
-->
<window title="Mozilla Bug 895340"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <script type="application/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>

  <!-- test results are displayed in the html:body -->
  <body xmlns="http://www.w3.org/1999/xhtml">
  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=895340 "
     target="_blank">Mozilla Bug 895340 </a>
  </body>

  <!-- test code goes here -->
  <script type="application/javascript"><![CDATA[

  SimpleTest.waitForExplicitFinish();
  SimpleTest.expectUncaughtException();

  const Cu = Components.utils;
  Cu.import("resource://gre/modules/Services.jsm", this);

  var finished = false;

  var console = Components.classes["@mozilla.org/consoleservice;1"]
                          .getService(Components.interfaces.nsIConsoleService);

  let listener = {
    QueryInterface: function(iid) {
      if (!iid.equals(Components.interfaces.nsIConsoleListener) &&
          !iid.equals(Components.interfaces.nsISupports))
      {
        throw Components.results.NS_ERROR_NO_INTERFACE;
      }
      return this;
    }
  };

  listener.observe = function(aMessage) {
    if (aMessage.message.indexOf("Will you report me?") != -1 && !finished) {
      finished = true;
      ok(true, "exception reported");
      console.unregisterListener(listener);
      SimpleTest.finish();
    }
  };

  console.registerListener(listener);

  /* Throw an exception and verify that it gets reported. */
  let foo_obs = function() {
    throw new Error("Will you report me?");
  };

  Services.obs.addObserver(foo_obs, "foo", false);
  Services.obs.notifyObservers(null, "foo", "foo");
  Services.obs.removeObserver(foo_obs, "foo");
  ]]></script>
</window>
